<html>
<head><meta charset="utf-8"><title>Merge rustc_codegen_gcc backend as compil… compiler-team#442 · t-compiler/major changes · Zulip Chat Archive</title></head>
<h2>Stream: <a href="https://rust-lang.github.io/zulip_archive/stream/233931-t-compiler/major-changes/index.html">t-compiler/major changes</a></h2>
<h3>Topic: <a href="https://rust-lang.github.io/zulip_archive/stream/233931-t-compiler/major-changes/topic/Merge.20rustc_codegen_gcc.20backend.20as.20compil.E2.80.A6.20compiler-team.23442.html">Merge rustc_codegen_gcc backend as compil… compiler-team#442</a></h3>

<hr>

<base href="https://rust-lang.zulipchat.com">

<head><link href="https://rust-lang.github.io/zulip_archive/style.css" rel="stylesheet"></head>

<a name="243808783"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/233931-t-compiler/major%20changes/topic/Merge%20rustc_codegen_gcc%20backend%20as%20compil%E2%80%A6%20compiler-team%23442/near/243808783" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> triagebot <a href="https://rust-lang.github.io/zulip_archive/stream/233931-t-compiler/major-changes/topic/Merge.20rustc_codegen_gcc.20backend.20as.20compil.E2.80.A6.20compiler-team.23442.html#243808783">(Jun 24 2021 at 16:08)</a>:</h4>
<p>A new proposal has been announced: <a href="https://github.com/rust-lang/compiler-team/issues/442">Merge rustc_codegen_gcc backend as compiler/rustc_codegen_gcc #442</a>. It will be announced at the next meeting to try and draw attention to it, but usually MCPs are not discussed during triage meetings. If you think this would benefit from discussion amongst the team, consider proposing a design meeting.</p>



<a name="243808960"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/233931-t-compiler/major%20changes/topic/Merge%20rustc_codegen_gcc%20backend%20as%20compil%E2%80%A6%20compiler-team%23442/near/243808960" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nagisa <a href="https://rust-lang.github.io/zulip_archive/stream/233931-t-compiler/major-changes/topic/Merge.20rustc_codegen_gcc.20backend.20as.20compil.E2.80.A6.20compiler-team.23442.html#243808960">(Jun 24 2021 at 16:09)</a>:</h4>
<p>Significant prior discussion at <a href="#narrow/stream/131828-t-compiler/topic/Considering.20a.20future.20integration.20of.20the.20gcc.20backend">https://rust-lang.zulipchat.com/#narrow/stream/131828-t-compiler/topic/Considering.20a.20future.20integration.20of.20the.20gcc.20backend</a></p>



<a name="243844676"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/233931-t-compiler/major%20changes/topic/Merge%20rustc_codegen_gcc%20backend%20as%20compil%E2%80%A6%20compiler-team%23442/near/243844676" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Josh Triplett <a href="https://rust-lang.github.io/zulip_archive/stream/233931-t-compiler/major-changes/topic/Merge.20rustc_codegen_gcc.20backend.20as.20compil.E2.80.A6.20compiler-team.23442.html#243844676">(Jun 24 2021 at 20:51)</a>:</h4>
<p><span class="user-mention" data-user-id="211727">@Jonas Schievink  [he/him]</span> I'm really glad for the support, but I'm not sure if compiler-contributors can second a proposal. I think it needs one of the compiler-team members to second.</p>



<a name="243844729"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/233931-t-compiler/major%20changes/topic/Merge%20rustc_codegen_gcc%20backend%20as%20compil%E2%80%A6%20compiler-team%23442/near/243844729" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jonas Schievink  [he/him] <a href="https://rust-lang.github.io/zulip_archive/stream/233931-t-compiler/major-changes/topic/Merge.20rustc_codegen_gcc.20backend.20as.20compil.E2.80.A6.20compiler-team.23442.html#243844729">(Jun 24 2021 at 20:51)</a>:</h4>
<p>no, I've seconded MCPs before, probably the bot is just not cooperating</p>



<a name="243844946"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/233931-t-compiler/major%20changes/topic/Merge%20rustc_codegen_gcc%20backend%20as%20compil%E2%80%A6%20compiler-team%23442/near/243844946" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Josh Triplett <a href="https://rust-lang.github.io/zulip_archive/stream/233931-t-compiler/major-changes/topic/Merge.20rustc_codegen_gcc.20backend.20as.20compil.E2.80.A6.20compiler-team.23442.html#243844946">(Jun 24 2021 at 20:52)</a>:</h4>
<p>Ah, nevermind, I misunderstood the process. Sorry. :)</p>



<a name="243844996"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/233931-t-compiler/major%20changes/topic/Merge%20rustc_codegen_gcc%20backend%20as%20compil%E2%80%A6%20compiler-team%23442/near/243844996" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jonas Schievink  [he/him] <a href="https://rust-lang.github.io/zulip_archive/stream/233931-t-compiler/major-changes/topic/Merge.20rustc_codegen_gcc.20backend.20as.20compil.E2.80.A6.20compiler-team.23442.html#243844996">(Jun 24 2021 at 20:53)</a>:</h4>
<p><code>@rustbot</code> seems down, it's not applying labels on rust-lang/rust either</p>



<a name="243845015"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/233931-t-compiler/major%20changes/topic/Merge%20rustc_codegen_gcc%20backend%20as%20compil%E2%80%A6%20compiler-team%23442/near/243845015" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Josh Triplett <a href="https://rust-lang.github.io/zulip_archive/stream/233931-t-compiler/major-changes/topic/Merge.20rustc_codegen_gcc.20backend.20as.20compil.E2.80.A6.20compiler-team.23442.html#243845015">(Jun 24 2021 at 20:53)</a>:</h4>
<p>Ah, that would do it.</p>



<a name="243845172"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/233931-t-compiler/major%20changes/topic/Merge%20rustc_codegen_gcc%20backend%20as%20compil%E2%80%A6%20compiler-team%23442/near/243845172" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> simulacrum <a href="https://rust-lang.github.io/zulip_archive/stream/233931-t-compiler/major-changes/topic/Merge.20rustc_codegen_gcc.20backend.20as.20compil.E2.80.A6.20compiler-team.23442.html#243845172">(Jun 24 2021 at 20:54)</a>:</h4>
<p>Yeah I think I know why, pushing up a fix shortly</p>



<a name="243846984"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/233931-t-compiler/major%20changes/topic/Merge%20rustc_codegen_gcc%20backend%20as%20compil%E2%80%A6%20compiler-team%23442/near/243846984" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/233931-t-compiler/major-changes/topic/Merge.20rustc_codegen_gcc.20backend.20as.20compil.E2.80.A6.20compiler-team.23442.html#243846984">(Jun 24 2021 at 21:08)</a>:</h4>
<p>yeah it's mentioned in the MCP text itself: "A compiler team member or contributor who is knowledgeable in the area can second by writing..." ^^</p>



<a name="243847168"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/233931-t-compiler/major%20changes/topic/Merge%20rustc_codegen_gcc%20backend%20as%20compil%E2%80%A6%20compiler-team%23442/near/243847168" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Léo Lanteri Thauvin <a href="https://rust-lang.github.io/zulip_archive/stream/233931-t-compiler/major-changes/topic/Merge.20rustc_codegen_gcc.20backend.20as.20compil.E2.80.A6.20compiler-team.23442.html#243847168">(Jun 24 2021 at 21:10)</a>:</h4>
<p>Applied the label manually</p>



<a name="243981759"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/233931-t-compiler/major%20changes/topic/Merge%20rustc_codegen_gcc%20backend%20as%20compil%E2%80%A6%20compiler-team%23442/near/243981759" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> cuviper <a href="https://rust-lang.github.io/zulip_archive/stream/233931-t-compiler/major-changes/topic/Merge.20rustc_codegen_gcc.20backend.20as.20compil.E2.80.A6.20compiler-team.23442.html#243981759">(Jun 25 2021 at 23:30)</a>:</h4>
<blockquote>
<p>We hope that in practice, Linux distributions will build and distribute the GCC backend once it passes enough of the testsuite to be widely useful, and especially once we have targets that depend on it.</p>
</blockquote>
<p>FWIW, for my part, Fedora and Red Hat do not generally ship cross compilers, and all our targets are already well supported by LLVM. I would have to see significant _additional_ benefit before I consider enabling another backend in our distros.</p>



<a name="243981783"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/233931-t-compiler/major%20changes/topic/Merge%20rustc_codegen_gcc%20backend%20as%20compil%E2%80%A6%20compiler-team%23442/near/243981783" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> cuviper <a href="https://rust-lang.github.io/zulip_archive/stream/233931-t-compiler/major-changes/topic/Merge.20rustc_codegen_gcc.20backend.20as.20compil.E2.80.A6.20compiler-team.23442.html#243981783">(Jun 25 2021 at 23:31)</a>:</h4>
<p>but I do see how this will be attractive to Debian, for instance, as they have more "niche" arches</p>



<a name="243986172"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/233931-t-compiler/major%20changes/topic/Merge%20rustc_codegen_gcc%20backend%20as%20compil%E2%80%A6%20compiler-team%23442/near/243986172" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Josh Triplett <a href="https://rust-lang.github.io/zulip_archive/stream/233931-t-compiler/major-changes/topic/Merge.20rustc_codegen_gcc.20backend.20as.20compil.E2.80.A6.20compiler-team.23442.html#243986172">(Jun 26 2021 at 00:58)</a>:</h4>
<p><span class="user-mention" data-user-id="138448">@cuviper</span> Fully acknowledged. "widely useful" was an intentionally chosen phrase; if it won't be widely useful <em>to that distribution's users</em> then it probably won't get shipped.</p>



<a name="243986180"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/233931-t-compiler/major%20changes/topic/Merge%20rustc_codegen_gcc%20backend%20as%20compil%E2%80%A6%20compiler-team%23442/near/243986180" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Josh Triplett <a href="https://rust-lang.github.io/zulip_archive/stream/233931-t-compiler/major-changes/topic/Merge.20rustc_codegen_gcc.20backend.20as.20compil.E2.80.A6.20compiler-team.23442.html#243986180">(Jun 26 2021 at 00:59)</a>:</h4>
<p>I think another question will be if it generates better code for x86. I look forward to seeing that.</p>



<a name="243986186"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/233931-t-compiler/major%20changes/topic/Merge%20rustc_codegen_gcc%20backend%20as%20compil%E2%80%A6%20compiler-team%23442/near/243986186" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Josh Triplett <a href="https://rust-lang.github.io/zulip_archive/stream/233931-t-compiler/major-changes/topic/Merge.20rustc_codegen_gcc.20backend.20as.20compil.E2.80.A6.20compiler-team.23442.html#243986186">(Jun 26 2021 at 00:59)</a>:</h4>
<p>That said...</p>



<a name="243986249"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/233931-t-compiler/major%20changes/topic/Merge%20rustc_codegen_gcc%20backend%20as%20compil%E2%80%A6%20compiler-team%23442/near/243986249" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Josh Triplett <a href="https://rust-lang.github.io/zulip_archive/stream/233931-t-compiler/major-changes/topic/Merge.20rustc_codegen_gcc.20backend.20as.20compil.E2.80.A6.20compiler-team.23442.html#243986249">(Jun 26 2021 at 01:00)</a>:</h4>
<p><span class="user-mention silent" data-user-id="138448">cuviper</span> <a href="#narrow/stream/233931-t-compiler.2Fmajor-changes/topic/Merge.20rustc_codegen_gcc.20backend.20as.20compil.E2.80.A6.20compiler-team.23442/near/243981759">said</a>:</p>
<blockquote>
<p>Fedora and Red Hat do not generally ship cross compilers</p>
</blockquote>
<p>Does that include things like the WebAssembly backend for rustc, or the ARM64 backend on x86-64 platforms? Given that LLVM already supports those, and it's just a matter of providing the prebuilt std, I'm hoping it'd be reasonable to ship those.</p>



<a name="243986593"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/233931-t-compiler/major%20changes/topic/Merge%20rustc_codegen_gcc%20backend%20as%20compil%E2%80%A6%20compiler-team%23442/near/243986593" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> cuviper <a href="https://rust-lang.github.io/zulip_archive/stream/233931-t-compiler/major-changes/topic/Merge.20rustc_codegen_gcc.20backend.20as.20compil.E2.80.A6.20compiler-team.23442.html#243986593">(Jun 26 2021 at 01:07)</a>:</h4>
<p>I actually did just start shipping wasm32-unknown-unknown</p>



<a name="243986662"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/233931-t-compiler/major%20changes/topic/Merge%20rustc_codegen_gcc%20backend%20as%20compil%E2%80%A6%20compiler-team%23442/near/243986662" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> cuviper <a href="https://rust-lang.github.io/zulip_archive/stream/233931-t-compiler/major-changes/topic/Merge.20rustc_codegen_gcc.20backend.20as.20compil.E2.80.A6.20compiler-team.23442.html#243986662">(Jun 26 2021 at 01:08)</a>:</h4>
<p>But for other linux-gnu targets, it's not just std, you also need target cc, binutils, etc</p>



<a name="243988088"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/233931-t-compiler/major%20changes/topic/Merge%20rustc_codegen_gcc%20backend%20as%20compil%E2%80%A6%20compiler-team%23442/near/243988088" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Josh Triplett <a href="https://rust-lang.github.io/zulip_archive/stream/233931-t-compiler/major-changes/topic/Merge.20rustc_codegen_gcc.20backend.20as.20compil.E2.80.A6.20compiler-team.23442.html#243988088">(Jun 26 2021 at 01:41)</a>:</h4>
<p>Fair enough. The toolchain doesn't seem like too big of a deal (and there's always clang), but once you start going down that road, you also need cross-compiled libc and similar, and you end up needing something like Debian's multiarch.</p>



<a name="244118886"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/233931-t-compiler/major%20changes/topic/Merge%20rustc_codegen_gcc%20backend%20as%20compil%E2%80%A6%20compiler-team%23442/near/244118886" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> rylev <a href="https://rust-lang.github.io/zulip_archive/stream/233931-t-compiler/major-changes/topic/Merge.20rustc_codegen_gcc.20backend.20as.20compil.E2.80.A6.20compiler-team.23442.html#244118886">(Jun 28 2021 at 09:11)</a>:</h4>
<p>Question: is a potential benefit of this proposal that it further exercises Rusts pluggable backend model (which I know is something certain embedded communities with custom compilers could benefit from) or has the work on cranelift sufficiently proven out the model?</p>



<a name="244152847"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/233931-t-compiler/major%20changes/topic/Merge%20rustc_codegen_gcc%20backend%20as%20compil%E2%80%A6%20compiler-team%23442/near/244152847" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> oli <a href="https://rust-lang.github.io/zulip_archive/stream/233931-t-compiler/major-changes/topic/Merge.20rustc_codegen_gcc.20backend.20as.20compil.E2.80.A6.20compiler-team.23442.html#244152847">(Jun 28 2021 at 14:28)</a>:</h4>
<p>cc <span class="user-mention" data-user-id="133247">@bjorn3</span></p>



<a name="244155229"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/233931-t-compiler/major%20changes/topic/Merge%20rustc_codegen_gcc%20backend%20as%20compil%E2%80%A6%20compiler-team%23442/near/244155229" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> bjorn3 <a href="https://rust-lang.github.io/zulip_archive/stream/233931-t-compiler/major-changes/topic/Merge.20rustc_codegen_gcc.20backend.20as.20compil.E2.80.A6.20compiler-team.23442.html#244155229">(Jun 28 2021 at 14:43)</a>:</h4>
<p>I think the pluggable backend model works quite well. cg_gcc may help with making cg_ssa more suitable for backends other than LLVM though. It is hard to use it in cg_clif due to some things being quite different from what Cranelift expects. In addition it not very suitable for a non-optimizing compiler backend like Cranelift as it gives up on trying to keep things in ssa variables quite early. cg_ssa only tries to use ssa variables for locals with a single defining use. cg_clif uses it for everything except locals that have their address taken or are not scalars or scalar pairs.</p>



<a name="244171950"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/233931-t-compiler/major%20changes/topic/Merge%20rustc_codegen_gcc%20backend%20as%20compil%E2%80%A6%20compiler-team%23442/near/244171950" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> XAMPPRocky <a href="https://rust-lang.github.io/zulip_archive/stream/233931-t-compiler/major-changes/topic/Merge.20rustc_codegen_gcc.20backend.20as.20compil.E2.80.A6.20compiler-team.23442.html#244171950">(Jun 28 2021 at 16:39)</a>:</h4>
<p>Just my experience working on rust-gpu, I would say that it pretty aligns with what <span class="user-mention" data-user-id="133247">@bjorn3</span> said. cg_clif has done a lot of the heavy lifting of making rustc more pluggable, but there's a lot of improvements to make, and assumptions to remove in the compiler about the backend.</p>
<p>I don't remember specifics but we have run into issues before because rust-gpu is <em>both</em> a backend and a target that is outside of rustc.</p>



<a name="244224531"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/233931-t-compiler/major%20changes/topic/Merge%20rustc_codegen_gcc%20backend%20as%20compil%E2%80%A6%20compiler-team%23442/near/244224531" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> antoyo <a href="https://rust-lang.github.io/zulip_archive/stream/233931-t-compiler/major-changes/topic/Merge.20rustc_codegen_gcc.20backend.20as.20compil.E2.80.A6.20compiler-team.23442.html#244224531">(Jun 29 2021 at 01:46)</a>:</h4>
<p><span class="user-mention silent" data-user-id="224872">rylev</span> <a href="#narrow/stream/233931-t-compiler.2Fmajor-changes/topic/Merge.20rustc_codegen_gcc.20backend.20as.20compil.E2.80.A6.20compiler-team.23442/near/244118886">said</a>:</p>
<blockquote>
<p>Question: is a potential benefit of this proposal that it further exercises Rusts pluggable backend model (which I know is something certain embedded communities with custom compilers could benefit from) or has the work on cranelift sufficiently proven out the model?</p>
</blockquote>
<p>I'll definitely want to see some changes to make <code>cg_ssa</code> more friendly to non-LLVM backends: I even believe that I won't be able to implement some features (e.g. unwinding) without changing <code>cg_ssa</code> and many other features required a hack in <code>cg_gcc</code> in order to make it work.</p>



<a name="245299776"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/233931-t-compiler/major%20changes/topic/Merge%20rustc_codegen_gcc%20backend%20as%20compil%E2%80%A6%20compiler-team%23442/near/245299776" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> triagebot <a href="https://rust-lang.github.io/zulip_archive/stream/233931-t-compiler/major-changes/topic/Merge.20rustc_codegen_gcc.20backend.20as.20compil.E2.80.A6.20compiler-team.23442.html#245299776">(Jul 08 2021 at 11:25)</a>:</h4>
<p>This proposal has been accepted: <a href="https://github.com/rust-lang/compiler-team/issues/442">#442</a>.</p>



<hr><p>Last updated: Aug 07 2021 at 22:04 UTC</p>
</html>